package com.shujia

object Code11Fun {

  def main(args: Array[String]): Unit = {
    /**
     * 函数的省略规则：
     * 1、如果代码只有一行 花括号可以省略 (Scala中所有带有方法体的都使用)
     * 2、如果匿名函数作为 参数 传给另外一个函数 则匿名函数的参数类型可以省略
     * 3、如果匿名函数只有一个参数则括号可以省略,对于普通函数调用时，如果没有参数()可以直接省略掉 、
     * 4、如果匿名函数中的参数在逻辑中只使用了一次 则可以用下划线替代 然后 => 左边的部分可以省略
     */

    val fun1: Int => Int = (a: Int) => a * a
    println(fun1(2))


    var ifRes = if (3 > 2) 3 * 3
    //    while (4>3) println("while执行...")


    // i的类型是由fun3推断出来，所以可以不用填写其类型
    println(fun3(
      (i) => "*" * i
    ))

    println(fun3(
      i => "#" * i
    ))

    println(fun3(
      "$" * _
    ))

    println(fun5(
      (a, b) => a *  b
    ))

  }

  def fun2(a: Int) = a * a

  def fun3(f: Int => String): String = {
    f(3)
  }

  //  def fun4(i) = {
  //
  //  }

  def fun4() = {
    println(3 * 3)
  }

  def fun5(f: (Int, Int) => Int): Int = {
    f(3, 4)
  }


}
